#ifndef APPLAYER_H
#define APPLAYER_H

#include "main.h"
#include "heating.h"
#include "pid.h"

#define HEATING_PLATFORM_MAX  6            // 定义控温模式数量
#define REFLOWSOLDER_MAX      3             // 回流焊模式数量




// 调试打印  0-不打印  1-打印
#define DEBUG_PRINTF       1

#if DEBUG_PRINTF
#define DEBUG_PRINTF_BUTTON       1         // 按键
#define DEBUG_PRINTF_HELP         1         // 帮助
#define DEBUG_PRINTF_KEY_DEAL     1         // 按键处理


#define DEBUG_PRINTF_UI             1         // UI显示

#define DEBUG_PRINTF_DB             0           // 调试程序 调试程序占用资源较大（大概2Kflash）

#else
#define DEBUG_PRINTF_BUTTON       0

#endif


#if DEBUG_PRINTF_DB

/*
调试程序：
实现功能：
1、进入调试模式
2、退出调试模式
3、测试NTC温度-AD值对应关系
4、设置控制温度
5、设置PI参数：P值 I值



*/

#define DEBUG_TEMP_MAX      220

typedef enum
{
    BG_SWITCH_MODE = 0,
    BG_TEST_NTC,
    BG_SET_TEMP,
    BG_SET_PI_P,
    BG_SET_PI_I,
    BG_SET_PI_D,
    BG_WORK,

}eDebugMode_Type;



typedef struct
{
    uint8_t sw : 1;
    uint8_t mode : 4;  // 0:选择模式 1：测试NTC温度  2：设置控温温度值 3：设置PI参数P  4：设置PI参数I
    uint8_t focus : 3; 

    uint8_t set_temp;   //设置控温温度
    uint8_t set_power;   //设置功率
    uint8_t set_pi_p;
    uint8_t set_pi_i;
    uint8_t set_pi_d;

    uint8_t set_temp_buf;
    uint8_t set_power_buf;
    uint8_t set_pi_p_buf;
    uint8_t set_pi_i_buf;
    uint8_t set_pi_d_buf;

}st_Debug_data;

extern st_Debug_data debug;
extern Heating_Type dg_Heating;

extern Heating_Type Heating;
// extern IncrementalPIController dg_Temp_PID;

void debug_printf_init(void);

void debug_printf_deinit(void);

void debug_printf_ack(void);

void debug_start_work(void);

void debug_printf_break(void);

void debug_printf_up(void);

void debug_printf_down(void);

void debug_printf_up_long(void);

void debug_printf_down_long(void);

void debug_printf_dis_1000ms(void);


#endif


// 系统状态
typedef enum
{
    SYSTEM_SHUT_DOWN = 0, // 关机
	SYSTEM_BOOT_UP,		  // 开机

}eSystemStatus_Type;

// 系统模式
typedef enum
{
    STANDBY = 0,            // 信息
    CONTROL_TEMP,           // 控温
    COOLING,                // 回流焊
    PROTECT,                // 保护
    SETING,                 // 设置

}eSystemMode_Type;

// 控温模式
typedef struct 
{
    uint8_t     set_control_temp;       // 设置控制温度 
    uint16_t    set_work_time;          // 设置工作时间   单位：s
}Heating_Control_Type;

// 加热阶段
typedef struct
{
    uint8_t     set_control_temp;       // 设置控制温度
    uint16_t    set_control_time;       // 设置控制时间
    uint16_t    heating_time;           // 加热时间

}Heating_Phases_Type;

// 回流焊
typedef struct 
{
    uint8_t     set_control_status : 2;       // 设置控制状态 0-3
    uint8_t :6;
    Heating_Phases_Type stHeating_Phases[3];  // 加热阶段

}ReflowSoldering_Type;              


// 加热平台
typedef struct
{
    uint8_t flag_write_flash :1;     // 标记是否需要写flash
    uint8_t flag_heating_over_time : 1;
    uint8_t :                      6;

    uint8_t interface : 3;          // 界面 --- Layer
    uint8_t mode : 5;               // 模式   eSystemMode_Type  --- function

    uint8_t actual_temp;            // 实际温度   --- temp
    signed char calibrate_temp;     // 校准温度   --- temp_adjust
    uint8_t power_control;          // 功率控制   --- power
    uint16_t voltage;               // 电压
    uint8_t max_power;

    //pid参数
    uint8_t Kp;
    uint8_t Ki;
    uint8_t Kd;

    Heating_Control_Type  stHeating_Control[HEATING_PLATFORM_MAX];  // 控温模式
    ReflowSoldering_Type  stReflowSoldering[REFLOWSOLDER_MAX];      // 回流焊
    
    uint16_t    work_time;          // 工作时间         设置整机工作时间
    uint16_t heat_time;             // 加热时间

}Heating_Platform_Type;






extern Heating_Platform_Type Heating_Platform;
extern Heating_Type   Heating;



void system_data_init(void);

void SoftwareTimer_10MS(void);

void Key_Analysis_50MS(void);

void SoftwareTimer_100MS(void);

void SoftwareTimer_1000MS(void);



#endif
